【Flutter】Flutter初见-.WM-Want2BecomeMagicalGirl
flutter
flutter 框架开发的 app,打包后,会将代码打包成 so,而且会将接口请求添加证书校验,防止中间人攻击,普通方法是抓不到包的。无形中增加了逆向的难度,说句题外话,用 Flutter 框架开发,不仅可以跨平台,还增加了安全性👍。 Flutter 框架开发的项目,打包后会生成两个 so,分别是 libapp.so和 libflutter.so,前者是业务相关的,后者是 Flutter 引擎用到的。 用 IDA 打开libapp.so,会发现函数名都被混淆了,这时就要借助开源框架B(l)utter来还原混淆的函数名了。
B(l)utter官网有安装和使用方法,Linux、windows 和 mac 都行
WM-Want2BecomeMagicalGirl.(想要成为马猴烧酒)
jadx打开,查看lib,有flutter.so,典型的flutter思维
直接用blutter,利用blutter_dump出来的文件还原部分字符,还原查看有没有关键词。
搜索app的关键词后,明显能看见这是一个aes加密,加密模式为ecb,在dump下来的pp.txt中就有
但是这个aes加密的密钥是从中另一个so中拉取过来的
这个rc4执行完的结果就是aes的密钥的一部分,全部的密钥还是需要frida来抓,这里使用blutter给的frida脚本抓就行改点参数
1 | function onLibappLoaded() { |
做完这层加密后会发现然后要去java层中做xxtea,但是静态的xxtea和动态执行的不一样,在libnative_add.so中
的.init_proc函数中有一个hook吧xxtea的加密进行更改,sub_1A51C是具体的更改函数
修改:对 指令页(v3 = code_item->insns)mprotect 成 RWX,遍历前 0xA0 字节,只对命中的半字动手:
0x??B3→0x??B20x??E0→0x??E2
同时把原字节备份到.data,以便随时回滚。
这里大佬是用动调dump确认的,下面是动调后的更改结果
然后再把加密后的密文进行base64
最终密文可以在pp.txt进行查看











